// 题目相关API接口

import { http } from "@/utils/core/http"
import { apiWrapper, apiWrapperWithAuth } from "@/utils/core/api-wrapper"

/**
 * 获取题目列表（分页查询）
 * @param {Object} params - 查询参数
 * @param {string} params.keyword - 关键词搜索
 * @param {string} params.difficulty - 难度筛选
 * @param {string} params.tags - 标签筛选
 * @param {number} params.pageNum - 页码
 * @param {number} params.pageSize - 每页大小
 * @returns {Promise} 返回题目列表数据
 */
export function getProblemList(params = {}) {
  return apiWrapper(() => {
    const endpoint = params.isAdmin ? "/problem/admin" : "/problem/list";
    const { isAdmin, ...apiParams } = params;

    return http.get(endpoint, {
      params: {
        ...apiParams,
        pageNum: apiParams.pageNum || 1,
        pageSize: apiParams.pageSize || 10,
      }
    });
  });
}

/**
 * 根据id获取题目详情
 * @param {number} id - 题目ID
 * @returns {Promise} 返回题目详情数据
 */
export function getProblemDetail(id) {
  return apiWrapper(() => http.get(`/problem/${id}`));
}

/**
 * 提交代码进行判题
 * @param {number} id - 题目ID
 * @param {Object} data - 提交数据
 * @param {string} data.code - 代码内容
 * @param {string} data.language - 编程语言
 * @param {boolean} data.isSubmission - 是否为提交（true）还是运行（false）
 * @returns {Promise} 返回判题结果
 */
export function submitCode(id, data) {
  return apiWrapperWithAuth((userId) => 
    http.post(`/judge/submit`, {
      problemId: id,
      code: data.code,
      language: data.language,
      userId: userId,
      isSubmission: data.isSubmission || false,
    })
  );
}

/**
 * 获取提交记录 - 暂未实现
 * @returns {Promise} 返回提交记录列表
 */
export function getSubmissions() {
  return apiWrapper(() => 
    Promise.resolve({
      code: 200,
      data: [],
      message: "提交记录功能暂未实现"
    })
  );
}

/**
 * 获取题目标签列表 - 暂未实现
 * @returns {Promise} 返回标签列表
 */
export function getProblemTags() {
  return apiWrapper(() => 
    Promise.resolve({
      code: 200,
      data: [],
      message: "题目标签功能暂未实现"
    })
  );
}

/**
 * 创建新题目（管理员）
 * @param {Object} data - 题目数据
 * @returns {Promise} 返回创建结果
 */
export function createProblem(data) {
  return apiWrapper(() => http.post("/problem", data));
}

/**
 * 更新题目信息（管理员）
 * @param {string} id - 题目 ID
 * @param {Object} data - 更新的题目数据
 * @returns {Promise} 返回更新结果
 */
export function updateProblem(id, data) {
  return apiWrapper(() => http.put(`/problem/${id}`, data));
}

/**
 * 删除题目（管理员）
 * @param {string} id - 题目 ID
 * @returns {Promise} 返回删除结果
 */
export function deleteProblem(id) {
  return apiWrapper(() => http.delete(`/problem/${id}`));
}

// 导入统计API
export { getProblemStatistics } from "./statistics";
